//最大层内元素和
/*给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层，而根节点的子节点位于第 2 层，依此类推。

请返回层内元素之和 最大 的那几层（可能只有一层）的层号，并返回其中 最小 的那个。*/
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
 * right(right) {}
 * };
 */
class Solution {
    vector<int> ret;

public:
    int maxLevelSum(TreeNode* root) {
        dfs(root, 1);
        int Max_count = INT_MIN;
        int Min = ret.size();
        for (int i = 0; i < ret.size(); i++) {
            if (Max_count < ret[i]) {
                Max_count = ret[i];
                Min = i;
            }
        }
        return Min + 1;
    }
    void dfs(TreeNode* root, int count) {
        if (root == nullptr)
            return;
        if (ret.size() < count) {
            ret.push_back(root->val);
        } else {
            ret[count - 1] += root->val;
        }
        dfs(root->left, count + 1);
        dfs(root->right, count + 1);
    }
};



//不同的平均值数目
/*给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。

只要 nums 不是 空数组，你就重复执行以下步骤：

找到 nums 中的最小值，并删除它。
找到 nums 中的最大值，并删除它。
计算删除两数的平均值。
两数 a 和 b 的 平均值 为 (a + b) / 2 。

比方说，2 和 3 的平均值是 (2 + 3) / 2 = 2.5 。
返回上述过程能得到的 不同 平均值的数目。

注意 ，如果最小值或者最大值有重复元素，可以删除任意一个。
*/
class Solution {
public:
    int distinctAverages(vector<int>& nums) {
        int count = 0;
        sort(nums.begin(), nums.end());
        int left = 0;
        int right = nums.size() - 1;
        unordered_set<double> Set;
        pair<unordered_set<double>::iterator, bool> P;
        while (left < right) {
            double mid = (nums[left] + nums[right]) / 2.0;
            P = Set.insert(mid);
            if (P.second)
                count++;
            left++;
            right--;
        }
        return count;
    }
};